// lib/widgets/comment_section.dart
import 'package:flutter/material.dart';

import '../../api/CommentApi.dart';
import '../../models/comment.dart';
import '../../models/response.dart';
import 'comment_card.dart'; // 导入 CommentCard

class CommentWidget extends StatefulWidget {
  final String postId; // 帖子ID，用于获取评论和创建评论

  const CommentWidget({
    super.key,
    required this.postId,
  });

  @override
  State<CommentWidget> createState() => _CommentWidgetState();
}

class _CommentWidgetState extends State<CommentWidget> {
  final CommentApi _commentApi = CommentApi();
  final TextEditingController _commentController = TextEditingController(); // 评论输入框控制器

  List<Comment> _comments = []; // 评论列表
  bool _isLoadingComments = true; // 评论加载状态
  String? _commentErrorMessage; // 评论错误信息

  @override
  void initState() {
    super.initState();
    _fetchComments(); // 初始化时获取评论列表
  }

  @override
  void dispose() {
    _commentController.dispose(); // 释放控制器
    super.dispose();
  }

  /// 获取帖子评论列表
  Future<void> _fetchComments() async {
    setState(() {
      _isLoadingComments = true;
      _commentErrorMessage = null;
    });
    try {
      final ResponseSuccess<List<Comment>> response = await _commentApi.getComments(
        postId: widget.postId,
        page: 1, // 示例：始终获取第一页，实际应用中可能需要分页加载
        size: 20, // 示例：每页20条评论
      );
      // 只判断 code 是否为 1000 (成功)
      if (response.code == 1000) {
        setState(() {
          // 如果 response.data 是 null，则 _comments 会被赋值为空列表，这是正确的行为
          _comments = response.data ?? []; // 如果 data 为 null，则使用空列表
        });
      } else { // 如果 code 不是 1000，则认为是错误
        setState(() {
          _commentErrorMessage = response.msg ?? '获取评论失败';
        });
      }
    } catch (e) {
      setState(() {
        _commentErrorMessage = '加载评论异常: $e';
      });
    } finally {
      setState(() {
        _isLoadingComments = false;
      });
    }
  }

  /// 提交评论
  Future<void> _submitComment() async {
    final String commentContent = _commentController.text.trim();
    if (commentContent.isEmpty) {
      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(content: Text('评论内容不能为空')),
      );
      return;
    }

    // 显示加载指示器或禁用按钮，防止重复提交
    setState(() {
      // 可以在这里设置一个局部加载状态，例如 _isSubmittingComment = true;
    });

    try {
      // 调用 createComment 方法，因为它现在返回 Future<void>，我们只 await 它
      await _commentApi.createComment(
        postId: widget.postId, // postId 保持 String 类型，由 CommentApi 内部处理 BigInt.parse
        content: commentContent,
      );

      // 如果 await 成功完成（没有抛出异常），则表示评论成功
      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(content: Text('评论成功！')),
      );
      _commentController.clear(); // 清空输入框

      // --- 修改开始 ---
      // 评论成功后，打印响应结果（这里是确认成功的信息）
      print('评论创建成功，UI层确认。');
      // --- 修改结束 ---

      // 评论成功后，重新加载评论列表以显示新评论
      await _fetchComments();
    } catch (e) {
      // 捕获 CommentApi 中抛出的任何异常，并显示给用户
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('评论失败: $e')), // 显示从 API 层传递过来的详细错误信息
      );
    } finally {
      setState(() {
        // _isSubmittingComment = false; // 隐藏加载指示器或启用按钮
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        const Padding(
          padding: EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0),
          child: Text(
            '评论',
            style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
          ),
        ),
        // 评论输入框
        Padding(
          padding: const EdgeInsets.all(16.0),
          child: Row(
            children: [
              Expanded(
                child: TextField(
                  controller: _commentController,
                  decoration: const InputDecoration(
                    hintText: '写下你的评论...',
                    border: OutlineInputBorder(),
                    contentPadding: EdgeInsets.symmetric(horizontal: 12, vertical: 8),
                  ),
                  maxLines: null, // 允许多行输入
                  minLines: 1,
                ),
              ),
              const SizedBox(width: 8),
              ElevatedButton(
                onPressed: _submitComment,
                child: const Text('发送'),
              ),
            ],
          ),
        ),
        // 评论列表
        _isLoadingComments
            ? const Center(child: CircularProgressIndicator())
            : _commentErrorMessage != null
            ? Center(
          child: Padding(
            padding: const EdgeInsets.all(16.0),
            child: Column(
              children: [
                Text(
                  '评论加载失败: $_commentErrorMessage',
                  textAlign: TextAlign.center,
                  style: const TextStyle(color: Colors.red),
                ),
                const SizedBox(height: 10),
                ElevatedButton(
                  onPressed: _fetchComments,
                  child: const Text('重试'),
                ),
              ],
            ),
          ),
        )
            : _comments.isEmpty
            ? const Center(
          child: Padding(
            padding: EdgeInsets.all(16.0),
            child: Text('暂无评论，快来发表第一条评论吧！'),
          ),
        )
            : ListView.builder(
          shrinkWrap: true, // 允许 ListView 在 Column 中收缩
          physics: const NeverScrollableScrollPhysics(), // 禁用内部滚动，让外部 SingleChildScrollView 处理
          itemCount: _comments.length,
          itemBuilder: (context, index) {
            return CommentCard(comment: _comments[index]);
          },
        ),
      ],
    );
  }
}
